在企業級 RAG 系統中,隨著 知識庫規模擴大 和 同時用戶數上升,系統常會遇到效能瓶頸,例如:
因此必須從 快取、異步、負載均衡 三個角度同時優化。
避免重複計算或查詢 - 把「熱門結果」暫存起來,下次相同請求直接回應。
情境 1:重複查詢問題 省下 LLM 延遲與向量計算成本
情境 2:檢索結果快取 省下向量計算
# 簡單範例
def get_answer(query):
if cache.exists(query):
return cache.get(query) # 直接返回
result = rag_pipeline(query) # 完整 RAG 流程
cache.set(query, result, ex=3600) # 快取 1 小時
return result
企業效益:減少 70-80% 的重複計算,延遲從 2 秒降到 0.1 秒
把耗時操作放入背景任務,用戶不用等待,系統也不會卡住。
情境 1:文件上傳處理
情境 2:大批量資料更新
問題:企業每天有大量文檔需要入庫,如果同步處理會阻塞其他查詢請求
解決方案:異步處理文檔入庫,立即回應用戶,背景完成後新文檔可檢索,定期重建索引維持品質
索引更新策略:
即時操作:
定期重建:
實際運作流程:
白天:即時處理文檔變更(品質逐漸下降)
↓
凌晨:重建乾淨的索引(恢復最佳品質)
↓
新的一天:從最佳狀態重新開始
平衡考量:即時性 vs 品質、用戶體驗 vs 系統資源、成本控制
這種策略讓企業能接受「文檔更新後立即生效,但需定期優化」的模式,換取更好的系統穩定性和成本控制。
情境 3:報表生成
# 異步任務範例
@app.task
def process_document(file_path):
# 1. 文本提取
# 2. 切分 chunks
# 3. 向量化
# 4. 存入資料庫
pass
# API 立即回應
def upload_file(file):
process_document.delay(file.path) # 丟給背景
return {"status": "processing", "message": "檔案處理中"}
企業效益:用戶體驗提升,系統可支援更高併發
把請求分散到多台伺服器,避免單台機器過載。
情境 1:高峰時段壓力
情境 2:資源隔離
情境 3:容錯需求
# Nginx 簡單配置
upstream rag_servers {
server rag1:8000;
server rag2:8000;
server rag3:8000;
}
server {
location /api {
proxy_pass http://rag_servers;
}
}
企業效益:系統穩定性提升,可承載更多用戶
優化方案 | 延遲改善 | 併發提升 | 實施難度 |
---|---|---|---|
查詢快取 | 80-90% ↓ | 2-3x ↑ | 簡單 |
異步處理 | - | 5-10x ↑ | 中等 |
負載均衡 | 20-40% ↓ | 3-5x ↑ | 中等 |
三者組合 | 90%+ ↓ | 10x+ ↑ | 複雜 |
在你的工作或生活中,有沒有遇過「等待太久」的情境?如果可以「快取」某些結果,你希望快取的是什麼?(例如:常用的資料、重複的工作流程)
想像一個團隊同時要處理很多任務時,你覺得哪些事情適合「即時處理」,哪些事情適合「放到後面再處理」(異步)?
如果你要主持一場大型活動,現場同時有上百人找你問問題,你會怎麼安排「分工」或「分流」來避免自己被壓垮?(這就是負載均衡的概念)